package com.ztom.v2;

/**
 * @author ZhangTao
 */
public class Code88MaximumProductSubarray {

    public int maxProduct(int[] nums) {
        if (nums == null || nums.length == 0) {
            return 0;
        }
        // 0 位置信息
        int min = nums[0];
        int max = nums[0];
        int res = nums[0];

        for (int i = 1; i < nums.length; i++) {
            // 上一位置信息
            int lmin = min, lmax = max;
            // 考虑负负得正的情况
            min = Math.min(Math.min(nums[i], lmin * nums[i]), lmax * nums[i]);
            // 取前缀积, 或取当前值
            max = Math.max(Math.max(nums[i], lmin * nums[i]), lmax * nums[i]);
            res = Math.max(res, max);
        }
        return res;
    }
}
